package utils

import (
	"fmt"
	"time"
)

// JsonTime 自定义类型，用于包装 time.Time，便于自定义 JSON 序列化
type JsonTime time.Time

// MarshalJSON 实现 JsonTime 类型的自定义 JSON 序列化方法
// 该方法用于将 JsonTime 类型格式化为字符串，并返回 JSON 格式
func (j JsonTime) MarshalJSON() ([]byte, error) {
	// 将 JsonTime 格式化为 "2006-01-02 15:04:05" 格式的字符串
	stmp := fmt.Sprintf("\"%s\"", time.Time(j).Format("2006-01-02 15:04:05"))
	// 返回格式化后的字节数组，并成功完成序列化
	return []byte(stmp), nil
}

// FormatDateTime2 将给定的 Unix 时间戳（以秒为单位）转换为 JsonTime 类型
// 该函数的输入是一个时间戳（uint64 类型），并返回 JsonTime 类型的时间
func FormatDateTime2(timeValue uint64) JsonTime {
	// 使用 time.Unix 将 Unix 时间戳转换为 time.Time 类型，并将其转换为 JsonTime 类型
	return JsonTime(time.Unix(int64(timeValue), 0))
}

// FormatDateTime 将给定的 Unix 时间戳（以秒为单位）转换为字符串格式的时间
// 输入参数是一个时间戳（uint64 类型），返回值是一个字符串，格式为 "2006-01-02 15:04:05"
func FormatDateTime(timeValue uint64) string {
	// 将 Unix 时间戳转换为 time.Time 类型
	timeStr := time.Time(time.Unix(int64(timeValue), 0)).
		Format("2006-01-02 15:04:05")
	// 返回格式化后的时间字符串
	return timeStr
}
